package com.gdpu.liou.symphonyserver.mapper;

import com.gdpu.liou.symphonyserver.entity.Song;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 歌曲dao
 */
@Repository
public interface SongMapper {

    /**
     * 更新用户最近播放歌曲
     */
    int replaceRecentlySong(@Param("consumerId") Integer consumerId,
                            @Param("songId") Integer songId);

    /**
     * 添加歌曲
     */
    public boolean insertSong(Song song);


    /**
     * 收藏歌曲
     */
    public boolean insertCollectSong(@Param("consumerId") Integer consumerId,
                                     @Param("songId") Integer songId);


    /**
     * 删除歌曲
     */
    public int deleteSongBySongId(@Param("id") int id);


    /**
     * 收藏歌曲
     */
    public int deleteCollectSong(@Param("consumerId") Integer consumerId,
                                 @Param("songId") Integer songId);

    /**
     * 修改歌曲
     */
    public int updateSong(Song song);

    /**
     * 歌曲播放数量++
     *
     * @param songId 歌曲id
     * @return 返回执行条数
     */
    int selfIncreasingPlayCountOfSong(@Param("songId") Long songId);


    /**
     * 查询歌手歌曲数量：根据歌手id
     */
    public int songNumberOfSingerId(@Param("singerId") Integer singerId,
                                    @Param("name") String name);


    /**
     * 查询歌手的当前页的歌曲：根据歌手id
     */
    public List<Song> songOfSingerId(@Param("start") Integer start,
                                     @Param("pageSize") Integer pageSize,
                                     @Param("singerId") Integer singerId,
                                     @Param("name") String name);

    /**
     * 查询歌手的歌曲列表
     */
    public List<Song> songsBySingerId(
            @Param("singerId") Integer singerId
    );


    public Song songOfSongId(@Param("songId") Integer songId);


    /**
     * 根据歌手-歌曲模糊查询歌曲
     */
    public List<Song> likeSongSingerByKeyword(@Param("name") String name, @Param("limit") Integer limit);


    /**
     * 根据歌曲名字模糊查询歌曲
     */
    public List<Song> likeSongNameByKeyword(@Param("name") String name);


    /**
     * 查询用户最近播放的歌曲列表
     */
    List<Song> recentlySongList(@Param("consumerId") Integer consumerId);


    /**
     * 歌曲播放次数排行榜
     */
    List<Song> songRankingList(@Param("number") Integer number);


    /**
     * 随机查询歌曲
     *
     * @return 返回随机查询的歌曲列表
     */
    List<Song> randomSong();

    /**
     * 查询用户收藏歌曲列表
     *
     * @param consumerId 用户id
     * @return 返回收藏歌曲列表
     */
    List<Song> selectCollectSong(@Param("consumerId") Long consumerId);


    /**
     * 查询用户收藏歌曲列表id
     *
     * @param consumerId 用户id
     * @return 返回收藏歌曲id列表
     */
    List<Song> selectCollectSongId(@Param("consumerId") Long consumerId);


    /**
     * 查询该歌曲用户是否已收藏
     */
    int selectCollectSongIsExist(@Param("consumerId") Integer consumerId,
                                 @Param("songId") Integer songId);

    /**
     * 查询歌单的歌曲列表
     *
     * @param playlistId 歌单id
     * @return 返回歌曲的歌单列表
     */
    List<Song> selectSongsOfPlaylist(@Param("playlistId") Long playlistId);

    /**
     * 查询歌曲播放排行
     *
     * @param limit 限制条数
     * @return 返回歌曲播放排行
     */
    List<Song> selectRankingOfSong(@Param("limit") Integer limit);

    /**
     * 根据id查询音乐
     * @param id
     * @return
     */
    Song selectSongById(Integer id);

    /**
     * 根据id修改歌曲封面
     *
     * @param id
     * @param newPic
     * @return
     */
    int updateSongPic(@Param("id") int id, @Param("newPic") String newPic);
}
